/*
    created: 2023/4/11
    filename: liststack.h
    author: 李东霖
    purpose： 使用链表实现栈  带头结点
*/

#ifndef _LISTSTACK_H_
#define _LISTSTACK_H_
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef char ElemType;
//数据结构
typedef struct SNode
{
    ElemType data;
    struct SNode* next; //指向下一个
}SNode,*PListStack;

//初始化  
int InitStack1(PListStack *s);
//初始化  
SNode* InitStack2(); 
//销毁栈 
void DistroyStack(PListStack *s); 
//清空栈 
void ClearStack(PListStack s);

//求栈的长度 返回值：-1-传入的指针为NULL 0-空栈 >0-长度
int LengthStack(PListStack s);

//判断栈空 返回值 1-空 0-非空 -1-传入栈是空的
int StackEmpty(PListStack s); 

//将元素压入栈顶 返回值 1-成功 0-失败 -1-传入栈是空的
int Push(PListStack s,ElemType *e);  
//将栈顶元素出栈存放到e中  返回值 1-成功 0-失败 -1-传入栈是空的
int Pop(PListStack s,ElemType *e); 
//得到栈顶元素  返回值 -1-栈为NULL 0-失败 1-成功
int GetTop(PListStack s,ElemType *e);  
//打印这个栈
void DispStack(PListStack s);
#endif //!_LISTSTACK_H_